package com.tang.Proxy;

import org.springframework.beans.factory.FactoryBean;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @author tmh
 * @date 2024/3/13 22:28
 * @description
 */
public class ProxyFactoryBean implements FactoryBean {
    //    创建代理对象
    @Override
    public Object getObject() throws Exception {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        //这个方式 可以获取到IUserDao的Class对象
        Class<?>[] classes = {IUserDao.class};
        InvocationHandler handler = ((proxy, method, args) -> {
            // 下面这行代码就是对接口方法的具体实现
            return "苏雨只会喵喵代理了这个方法：" + method.getName();
        });
        //生产IUserDao的代理对象
        IUserDao iUserDao = (IUserDao) Proxy.newProxyInstance(classLoader, classes, handler);
        return iUserDao;
    }

    @Override
    public Class<?> getObjectType() {
        //返回接口的Class对象
        return IUserDao.class;
    }
}
